package leetcode.hot100;

@SuppressWarnings("all")
public class _647_回文子串_暴力 {

    // 给定一个字符串，计算这个字符串中有多少个回文子串
    // 具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被视作不同的子串
    // 输入："abc"
    // 输出：3 ---> 解释：三个回文子串: "a", "b", "c"
    // 输入："aaa"
    // 输出：6 ---> 解释：6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

    char[] chars;

    public int countSubstrings(String s) {
        if (s == null || s.length() == 0) return 0;
        this.chars = s.toCharArray();
        // 计算出以每个字符结尾的回文字串就能够计算出总的回文字串
        int all = 0;
        for (int i = 0; i < chars.length; i++) {
            for (int j = 0; j <= i; j++) {
                all += count(j, i);
            }
        }
        return all;
    }

    // 统计字符数组中[0,i]范围内的回文字串
    private int count(int i, int j) {
        return isPalindromicSubString(i, j) ? 1 : 0;
    }

    // 判断指定区间的字符是否回文
    private boolean isPalindromicSubString(int i, int j) {
        int left = i;
        int right = j;
        while (left < right) {
            if (chars[left++] != chars[right--]) return false;
        }
        return true;
    }
}
